home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / src / lib / pointlist / ptlQuad.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-12  |  1.7 KB  |  72 lines

  1. #include "ooglutil.h"
  2. #include "geom.h"
  3. #include "quadP.h"
  4. #include "pointlistP.h"
  5.  
  6. void *quad_PointList_get(int sel, Geom *geom, va_list args);
  7. void *quad_PointList_fillin(int sel, Geom *geom, va_list args);
  8. void *quad_PointList_set(int sel, Geom *geom, va_list args);
  9. void *quad_PointList_length(int sel, Geom *geom, va_list args);
  10.  
  11. #define MAX_METHODS 4
  12.  
  13. static SpecFunc methods[] = {
  14.   "PointList_get", quad_PointList_get,
  15.   "PointList_fillin", quad_PointList_fillin,
  16.   "PointList_set", quad_PointList_set,
  17.   "PointList_length", quad_PointList_length
  18. };
  19.  
  20. static char msg[] = "ptlQuad.c";
  21.  
  22. ptlQuad_init() {
  23.   pointlist_initspec(methods, MAX_METHODS, GeomClassLookup("quad"));
  24. }
  25.  
  26.  
  27. void *quad_PointList_get(int sel, Geom *geom, va_list args) {
  28.   HPoint3 *plist;
  29.   Quad *q = (Quad *)geom;
  30.   float **t;
  31.  
  32.   plist = OOGLNewNE(HPoint3, q->maxquad * 4, msg);
  33.   t = va_arg(args, float **);
  34.   return GeomCall(GeomMethodSel("PointList_fillin"), geom, t, 0, plist);
  35. }
  36.  
  37.  
  38. void *quad_PointList_fillin(int sel, Geom *geom, va_list args) {
  39.   int i;
  40.   Quad *q = (Quad *)geom;
  41.   float **t;
  42.   HPoint3 *plist;
  43.   
  44.   t = va_arg(args, float **);
  45.   va_arg(args, int);
  46.   plist = va_arg(args, HPoint3 *);
  47.  
  48.   for (i = 0; i < q->maxquad; i++)
  49.     bcopy(q->p[i], &plist[i * 4], 4 * sizeof(HPoint3));
  50.   HPt3TransformN(t, plist, plist, q->maxquad * 4);
  51.   return plist;
  52. }
  53.  
  54. void *quad_PointList_set(int sel, Geom *geom, va_list args) {
  55.   int i;
  56.   HPoint3 *plist;
  57.   Quad *q = (Quad *)geom;
  58.   
  59.   va_arg(args, int);
  60.   plist = va_arg(args, HPoint3 *);
  61.   for (i = 0; i < q->maxquad; i++)
  62.     bcopy(&plist[i * 4], q->p[i], 4 * sizeof(HPoint3));
  63.   return((void *)q);
  64. }
  65.  
  66.  
  67. void *quad_PointList_length(int sel, Geom *geom, va_list args) {
  68.   Quad *q = (Quad *)geom;
  69.   return((void *)(q->maxquad * 4));
  70. }
  71.  
  72.